package chapter07;

import java.util.ArrayList;

public class Java03_Collection_List {
    public static void main(String[] args) {
        // TODO 集合 - ArrayList基本操作
        /*
            ArrayList：Array + List
                List：列表，清单；按照数据插入顺序进行存储
                Array：数组，阵列；
         */

        /*
            TODO 创建一个集合对象：ArrayList
                1.不需要传递构造参数，直接new，底层数组为空数组
                2.构造参数需要传递一个int类型的值，用于设定底层数组的长度
                3.构造参数需要传递一个Collection集合类型的值，用于将其他集合中的数据放置在当前集合中
         */
        ArrayList list = new ArrayList(3);

        // TODO 增加数据
        // add方法可以增加数据，只要将数据作为参数传递到add方法即可
        // 添加数据时，如果集合中没有任何数据，则底层会创建一个长度为10的数组
        list.add("zhangsan");
        list.add("zhangsan");
        list.add("wangwu");
        // 扩容：原设定集合的长度为3，当增加数据使集合长度大于3后底层会增加数组的长度
        list.add("zhaoliu");

        // TODO 访问集合中数据的长度
        System.out.println(list.size());    // 4
        System.out.println("-----------------------");

        // TODO 获取集合指定位置的数据,可以采用索引的方式
        System.out.println(list.get(1));    // lisi
        System.out.println("-----------------------");

        // TODO 遍历集合中的数据
        for (int i = 0; i < list.size(); i++) {
            System.out.println("集合中的数据："+list.get(i));
        }
        System.out.println("-----------------------");

        // TODO 循环遍历集合数据时，如果不关心数据的位置，那么可以采用特殊的for循环
        // for(循环对象 : 集合)
        for (Object obj : list) {
            System.out.println(obj);
        }
        System.out.println("-----------------------");

        // TODO 修改集合中的数据
        // 将指定位置的数据进行修改，set方法需要传递两个参数，第一个参数表示数据的位置，第二个参数为修改的值
        // 方法会返回结果，这个结果就是更新前的值
        Object lisi = list.set(1, "lisi");
        System.out.println("修改前的值："+ lisi);
        System.out.println("-----------------------");

        // TODO 删除集合中的数据
        // 将指定位置的数据进行修改删除，remove方法需要传递1个参数，参数表示索引的位置
        // 方法会返回结果，这个结果就是删除的值
        Object remove = list.remove(1);
        System.out.println("删除的数据："+remove);
        System.out.println("-----------------------");

        // TODO 打印集合对象
        System.out.println(list);   // [zhangsan, lisi, wangwu, zhaoliu]

    }
}
